#include "soc_io.h"
#include <string.h>

/*-------------------------------------------------------------------------------------------*/
/*--------------------------------- 第1部分代码 ---------------------------------------*/
/*-------------------------------------------------------------------------------------------*/
#define T 3  // 测试字符串数量

/* 待测字符串数组 */
char test_str[T][20] = {
    "hello",
    "world",
    "test"
};

/* 事先计算好的正确哈希值（base=31，mod=1000000007） */
unsigned long ans_hash[T] = {
    99161950UL,   // 对应 "hello"
    113194112UL,  // 对应 "world"
    3556498UL     // 对应 "test"
};

/* 选择新的哈希参数 */
static const unsigned long base = 31UL;
static const unsigned long mod  = 1000000007UL;

/*-------------------------------------------------------------------------------------------*/
/*--------------------------------- 第2部分代码 ---------------------------------------*/
/*-------------------------------------------------------------------------------------------*/
/* 计算多项式滚动哈希的示例函数 */
unsigned long rolling_hash(const char *s) {
    unsigned long h = 0;
    while(*s) {
        h = (h * base + (unsigned char)(*s)) % mod;
        s++;
    }
    return h;
}

int main() {
    init();          // 测试环境初始化
    int flag = 1;    // 测试结果标志

    int i;
    for(i = 0; i < T; i++) {
        unsigned long h = rolling_hash(test_str[i]);
        if(h != ans_hash[i]) {
            flag = 0; // 一旦发现不一致，标志置 0
            break;
        }
    }

    print_result(flag); // 输出测试结果

    while(1);
    return 0;
}